//
//  HMUserAccountViewModel.swift
//  MyWeibo
//
//  Created by apple on 16/4/20.
//  Copyright © 2016年 apple. All rights reserved.
//  创建一个viewmodel抽取代码


import UIKit
import SVProgressHUD


class HMUserAccountViewModel: NSObject {

    
    //创建一个单例
    
    static let sharedViewModel:HMUserAccountViewModel = HMUserAccountViewModel()
    
    //创建初始化方法 获取沙盒内容
    override init() {
        super.init()
        
      account = self.accountInSanbox()
    }
    //设置当前登录用户的账户信息
    var account:HMUserAccount?
    
    var accessToken:String?{
        
        return self.account?.access_token
    }
    
    
    //判断当前用户是否登录
    var login: Bool{
        
        //判断是否存在
        if accessToken == nil{
            
            return false
        }
        
        //如果存在 判断过期时间 是否存在
        guard let expiresDate = self.account?.expiresDate else {
            return false
        }
        
        //存在的话就和当前时间对比  如果成升序代表当前时间小于过期时间
        if NSDate().compare(expiresDate) == .OrderedAscending{
            
            //代表没有过期返回true
            return true
        }
        
        return false
    }

    
    //加载loadAccessTonken  添加一个闭包通知回调code
    func loadAccessTonken(code:String,finished:(isSuccess:Bool)->()){
        
        //请求url
        let url = "https://api.weibo.com/oauth2/access_token"

        /**
         
         必选	类型及范围	说明
         client_id	true	string	申请应用时分配的AppKey。
         client_secret	true	string	申请应用时分配的AppSecret。
         grant_type	true	string	请求的类型，填写authorization_code
         
         grant_type为authorization_code时
         必选	类型及范围	说明
         code	true	string	调用authorize获得的code值。
         redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
         
         */
        
        let param = [
            
            "client_id":WEIBO_APPKEY,
            "client_secret":WB_SECRET,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":WB_REDIRECT_URI
            
        ]
        
        //框架发送请求
        HMNetworkTools.sharedTools.request(.Post, urlString: url, parameters: param) { (responseObject, error) -> () in
            
            if error != nil{
                //失败的时候调用
                finished(isSuccess: false)
                return
            }
            print("请求成功\(responseObject)")
            
            //把请求回来的数据转换成字典
            guard let dict = responseObject as? [String:AnyObject] else{
                
                finished(isSuccess: false)
                
                print("后台返回的数据格式不对")
                return
            }
            
            //字典转模型
            let account = HMUserAccount(dict: dict)
            
            //获取到个人信息
           self.loadUserInfo(account, finished: finished)
            
        }
        
    }
    
    //获取个人信息的方法
    private func loadUserInfo(account:HMUserAccount,finished:(isSuccess:Bool)->()){
        
        // 请求地址
        let urlString = "https://api.weibo.com/2/users/show.json"
        
        // 请求参数
        let params = [
            "access_token": account.access_token ?? "",
            "uid": account.uid ?? ""
        ]
        
        // 发送请求返回数据获取用户信息
        HMNetworkTools.sharedTools.request(urlString: urlString, parameters: params) { (responseObject, error) -> () in
            
            if error != nil {
                
                finished(isSuccess: false)
                SVProgressHUD.showErrorWithStatus("网络错误")
                print(error)
                return
            }
            // 判断返回数据是否是字典
            guard let dict = responseObject as? [String: AnyObject] else {
                
                finished(isSuccess: false)
                print("后台返回的数据格式不对")
                return
            }
            // 强转字典里字符串获得名字
            account.name = dict["name"] as? String
            account.avatar_large = dict["avatar_large"] as? String
            
            self.account = account
            
            print(account)
            //使用 归档的形式来保存 登录信息
            self.saveAccount(account)
            //用来告诉外界登录成功
            finished(isSuccess: true)
            
        }
        
    }
    // 归档用户的个人信息
    private func saveAccount(account: HMUserAccount) {
        
        // 归档的路径 ： document路径 + 文件名
        let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("account.archive")
        
        print(path)
        // 归档
        NSKeyedArchiver.archiveRootObject(account, toFile: path)
    }
    
    
    // 去沙盒中读取 读取用户的登录信息
    private func accountInSanbox() -> HMUserAccount? {
        // 测试解档
        let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("account.archive")
        let result = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? HMUserAccount
        
        return result
    }
    
}
